package net.schastny.shopmanager.web;

import java.util.Map;

import net.schastny.shopmanager.domain.Contact;
import net.schastny.shopmanager.domain.Parsel;
import net.schastny.shopmanager.service.ParselService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller

public class ParselController {
	@Autowired
    private ParselService parselService;

	/*RequestMapping - Аннотация используется для маппинга урл-адреса запроса на указанный метод или класс. 
	 * Запрос можно маппить как на метод класса, так и на целый класс.
	 *  Допускается указывать конкретный HTTP-метод, который будет обрабатываться (GET/POST), 
	 *  передавать параметры запроса.
	 */
	@RequestMapping("/newParsel")
	   public String listParsel(Map<String, Object> map) {

        map.put("parsel", new Parsel());
        map.put("parselList", parselService.listParsel());

        return "parseladd";
    }
	
/*	@RequestMapping("/")
    public String home() {
        return "redirect:/shop";
    }
*/
	/*ModelAttribute - Аннотация, связывающая параметр метода или возвращаемое значение метода с атрибутом модели,
	 *  которая будет использоваться при выводе jsp-страницы.
	 */
	@RequestMapping(value = "/addParsel", method = RequestMethod.POST)
    public String addShop(@ModelAttribute("parsel") Parsel parsel,
            BindingResult result) {
		Authentication auth = SecurityContextHolder.getContext().getAuthentication();
		String name = auth.getName();
		parsel.setContactCreatedUser(name);
		parsel.setParselArrivalDate(null);
		parsel.setParselDepartureDate(null);
		parselService.addParsel(parsel);

        return "redirect:/index";
    }
	/*PathVariable - Аннотация, которая показывает, что параметр метода должен быть связан с переменной из урл-адреса. 
	 */
	@RequestMapping("/deleteParsel/{parselId}")
    public String deleteShop(@PathVariable("parselId") Integer parselId) {

		parselService.removeParsel(parselId);

        return "redirect:/index";
    }	
	
	   /**
     * Retrieves the "Edit Existing Record" page
     */
	
   @RequestMapping(value = "/editParsel/{parselId}", method = RequestMethod.GET)
    public String getEdit(@PathVariable("parselId") Integer parselId, Model model) {

    	//get existing BaseOrder
    	Parsel existingParsel = parselService.getParsel(parselId);
    	// Add existing BaseOrder to model
    	model.addAttribute("parsel", existingParsel);

    	return "parseladd";
	}
 
    /**
     * Edits an existing record
     */
   @RequestMapping(value = "/editParsel/{parselId}", method = RequestMethod.POST)
   public String postEdit(@PathVariable("parselId") Integer parselId, 
   						    @ModelAttribute("parsel") Parsel parsel) {
		
		// Assign id
	   parsel.setParselId(parselId);
	   System.out.println("------------------ParselEdit"+parsel.toString());
		
		// Delegate to service
	   parselService.editParsel(parsel);


		// Redirect to url
		return "redirect:/index";
	}
    	
	
	
}
